package com.android.support.lib.universal.sdk.weibo;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
import android.text.TextUtils;
import android.view.WindowManager;
import android.widget.Toast;


import com.android.support.lib.universal.R;
import com.android.support.lib.universal.sdk.weibo.general.AccessTokenKeeper;
import com.android.support.lib.universal.sdk.weibo.general.Constants;
import com.android.support.lib.universal.view.dialog.CustomProgressDialog;
import com.sina.weibo.sdk.auth.AuthInfo;
import com.sina.weibo.sdk.auth.Oauth2AccessToken;
import com.sina.weibo.sdk.auth.WeiboAuthListener;
import com.sina.weibo.sdk.auth.sso.SsoHandler;
import com.sina.weibo.sdk.exception.WeiboException;

/**
 * 该类主要演示如何进行授权、SSO登陆。
 * <p/>
 * 注意，现在微博需要签名和包名都一致才会认证通过。 包名只需要清单(AndroidManifest.xml)里包名微博注册上的包名一致即可。
 * 调用微博授权的Activity模式必须为 standard，防止微博授权后跳转不过来。
 */
public class WBAuthActivity extends Activity {
    private AuthInfo mAuthInfo;

    /**
     * 封装了 "access_token"，"expires_in"，"refresh_token"，并提供了他们的管理功能
     */
    private Oauth2AccessToken mAccessToken;

    /**
     * 注意：SsoHandler 仅当 SDK 支持 SSO 时有效
     */
    private SsoHandler mSsoHandler;

    /**
     * @see {@link Activity#onCreate}
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.lib_activity_sdk_weibo);

        // 创建微博实例
        // mWeiboAuth = new WeiboAuth(this, Constants.APP_KEY,
        // Constants.REDIRECT_URL, Constants.SCOPE);
        // 快速授权时，请不要传入 SCOPE，否则可能会授权不成功
        mAuthInfo = new AuthInfo(this, Constants.APP_KEY,
                Constants.REDIRECT_URL, Constants.SCOPE);

        mSsoHandler = new SsoHandler(WBAuthActivity.this, mAuthInfo);

        // SSO 授权, 仅客户端
        //android6.0客户端授权成功后，微博没有成功跳转回APP
        // mSsoHandler.authorizeClientSso(new AuthListener());

        // SSO 授权, 仅Web
        //mSsoHandler.authorizeWeb(new AuthListener());

        // SSO 授权, ALL IN ONE 如果手机安装了微博客户端则使用客户端授权,没有则进行网页授权
        mSsoHandler.authorize(new AuthListener());

        // 分享
        // Intent intent = new Intent();
        // intent.setClass(this, WBShareActivity.class);
        // startActivity(intent);

    }

    /**
     * 当 SSO 授权 Activity 退出时（仅客户端，web退出时，不会被调用），该函数被调用。
     * 会先调用AuthListener事件里的函数，然后再调用onActivityResult里的函数。
     *
     * @see {@link Activity#onActivityResult}
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        // SSO 授权回调
        // 重要：发起 SSO 登陆的 Activity 必须重写 onActivityResults
        if (mSsoHandler != null) {
            mSsoHandler.authorizeCallBack(requestCode, resultCode, data);
        }
    }

    /**
     * 微博认证授权回调类。 1. SSO 授权时，需要在 {@link #onActivityResult} 中调用
     * {@link SsoHandler#authorizeCallBack} 后， 该回调才会被执行。 2. 非 SSO
     * 授权时，当授权结束后，该回调就会被执行。 当授权成功后，请保存该 access_token、expires_in、uid 等信息到
     * SharedPreferences 中。
     */
    class AuthListener implements WeiboAuthListener {

        // 完成
        @Override
        public void onComplete(Bundle values) {
            // 从 Bundle 中解析 Token
            mAccessToken = Oauth2AccessToken.parseAccessToken(values);
            // 从这里获取用户输入的 电话号码信息
            String phoneNum = mAccessToken.getPhoneNum();
            if (mAccessToken.isSessionValid()) {
                // 保存 Token 到 SharedPreferences
                AccessTokenKeeper.writeAccessToken(WBAuthActivity.this,
                        mAccessToken);

                // 跳转用户信息界面
                Intent intent = new Intent();
                intent.setClass(WBAuthActivity.this, WBUserAPIActivity.class);
                startActivity(intent);

            } else {
                // 以下几种情况，您会收到 Code：
                // 1. 当您未在平台上注册的应用程序的包名与签名时；
                // 2. 当您注册的应用程序包名与签名不正确时；
                // 3. 当您在平台上注册的包名和签名与您当前测试的应用的包名和签名不匹配时。
                String code = values.getString("code");
                String message = "授权失败";
                if (!TextUtils.isEmpty(code)) {
                    message = message + "\nObtained the code: " + code;
                }
                Toast.makeText(WBAuthActivity.this, message, Toast.LENGTH_LONG)
                        .show();
            }
            WBAuthActivity.this.finish();
        }

        // 取消授权
        @Override
        public void onCancel() {
            Toast.makeText(WBAuthActivity.this,
                    "授权取消",
                    Toast.LENGTH_LONG).show();
            WBAuthActivity.this.finish();
        }

        // 授权异常
        @Override
        public void onWeiboException(WeiboException e) {
            Toast.makeText(WBAuthActivity.this,
                    "Auth exception : " + e.getMessage(), Toast.LENGTH_LONG)
                    .show();
            WBAuthActivity.this.finish();
        }

    }
}